/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.latesis.prueba;

import com.latesis.bean.AlertaEnviadaBean;
import com.latesis.bean.ChoferBean;
import com.latesis.bean.ClienteBean;
import com.latesis.bean.DireccionClienteBean;
import com.latesis.bean.EstadoBean;
import com.latesis.bean.GrupoBean;
import com.latesis.bean.MarcacionBean;
import com.latesis.bean.MensajeBean;
import com.latesis.bean.MovilBean;
import com.latesis.bean.PropietarioBean;
import com.latesis.bean.AlertaBean;
import com.latesis.bean.DetalleServicioBean;
import com.latesis.bean.DetalleTarifaBean;
import com.latesis.bean.OperadorBean;
import com.latesis.bean.PuntoGeocercaBean;
import com.latesis.bean.ServicioBean;
import com.latesis.bean.TarifaBean;
import com.latesis.bean.TrackingBean;
import com.latesis.bean.ZonaBean;
import com.latesis.dao.AlertaEnviadaDAO;
import com.latesis.dao.ChoferDAO;
import com.latesis.dao.ClienteDAO;
import com.latesis.dao.DireccionClienteDAO;
import com.latesis.dao.EstadoDAO;
import com.latesis.dao.GrupoDAO;
import com.latesis.dao.MarcacionDAO;
import com.latesis.dao.MensajeDAO;
import com.latesis.dao.MovilDAO;
import com.latesis.dao.PropietarioDAO;
import com.latesis.dao.AlertaDAO;
import com.latesis.dao.AsignacionServicioDAO;
import com.latesis.dao.DetalleServicioDAO;
import com.latesis.dao.DetalleTarifaDAO;
import com.latesis.dao.OperadorDAO;
import com.latesis.dao.PuntoGeocercaDAO;
import com.latesis.dao.ServicioDAO;
import com.latesis.dao.TarifaDAO;
import com.latesis.dao.TrackingDAO;
import com.latesis.dao.ZonaDAO;
import com.latesis.util.Constantes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.orm.hibernate3.HibernateTransactionManager;
/**
 *
 * @author Diego
 */
public class Prueba {
    public static void main(String[] args) throws IOException {
        System.out.println("Prueba de la tesis");
        
        
        ApplicationContext appContext = 
    	  //new ClassPathXmlApplicationContext("/resources/spring/config/BeanLocations.xml");
          //new ClassPathXmlApplicationContext("/../../WEB/WEB-INF/applicationContext.xml");
          new ClassPathXmlApplicationContext("/resources2/applicationContext.xml");
        
        final MovilDAO movilDao=(MovilDAO) appContext.getBean("movilDAO");
        final ChoferDAO choferDao=(ChoferDAO) appContext.getBean("choferDAO");
        final PropietarioDAO propietarioDao=(PropietarioDAO) appContext.getBean("propietarioDAO");
        final TrackingDAO trackingDao=(TrackingDAO) appContext.getBean("trackingDAO");
        final GrupoDAO grupoDao=(GrupoDAO) appContext.getBean("grupoDAO");
        final MensajeDAO mensajeDao=(MensajeDAO) appContext.getBean("mensajeDAO");
        final AlertaDAO alertaDao=(AlertaDAO) appContext.getBean("alertaDAO");
        final AlertaEnviadaDAO alertaEnviadaDao=(AlertaEnviadaDAO) appContext.getBean("alertaEnviadaDAO");
        final ZonaDAO zonaDao=(ZonaDAO) appContext.getBean("zonaDAO");
        final ClienteDAO clienteDao=(ClienteDAO) appContext.getBean("clienteDAO");
        final DireccionClienteDAO direccionClienteDao=(DireccionClienteDAO) appContext.getBean("direccionClienteDAO");
        final EstadoDAO estadoDao=(EstadoDAO) appContext.getBean("estadoDAO");
        final ServicioDAO servicioDao=(ServicioDAO) appContext.getBean("servicioDAO");
        final DetalleServicioDAO detalleServicioDao=(DetalleServicioDAO) appContext.getBean("detalleServicioDAO");
        final OperadorDAO operadorDao=(OperadorDAO) appContext.getBean("operadorDAO");
        final TarifaDAO tarifaDao=(TarifaDAO) appContext.getBean("tarifaDAO");
        final DetalleTarifaDAO detalleTarifaDao=(DetalleTarifaDAO) appContext.getBean("detalleTarifaDAO");
        final PuntoGeocercaDAO puntoGeocercaDao=(PuntoGeocercaDAO) appContext.getBean("puntoGeocercaDAO");
        final MarcacionDAO marcacionDao=(MarcacionDAO) appContext.getBean("marcacionDAO");    
        final AsignacionServicioDAO asignacionServicioDao=(AsignacionServicioDAO) appContext.getBean("asignacionServicioDAO");    
        
        
        if(true){
            System.out.println(" PROBAR QUERY DE SERVICIOS ASIGNADOS");
            List<ServicioBean> servicios=servicioDao.buscarAsignados(1l, 1l);
            for(ServicioBean s:servicios){
                System.out.println("servicio id: "+s.getId());
            }
            return;
        }
        
        //CREAR PROPIETARIO Y LISTARLOS
            System.out.println("\n  >>  CREAR PROPIETARIO Y LISTARLOS");            


            PropietarioBean  prop=new PropietarioBean();
            prop.setNombres("Don Dueño");
            prop.setApellidoPaterno("Muy");
            prop.setApellidoMaterno("Platudo");
            prop.setCorreo("dueño@macpato.com");
            prop.setDireccion("bell air");
            prop.setEstado(Constantes.ESTADO_ACTIVO);
            prop.setFechaNacimiento(new Date());
            prop.setMoviles(new ArrayList<MovilBean>());
            prop.setNumeroDocumento("12341234123");
            prop.setTipoDocumento(Constantes.TIPO_DOCUMENTO_DNI);
            prop.setTelefono("3555555");
            prop.setSexo(Constantes.SEXO_MASCULINO);
            propietarioDao.guardar(prop);

            List<PropietarioBean> lstPropietarios=propietarioDao.buscarTodos();
            for(PropietarioBean bean:lstPropietarios){
                System.out.println("propietario id: "+bean.getId());
            }  
     
        //REGISTRAR MOVIL
            System.out.println("\n  >>  REGISTRAR MOVIL");
            final MovilBean movil1=new MovilBean();
            movil1.setCodigo("mov1");
            movil1.setPlaca("ELT-AXI");
            movil1.setColor("NEGRO");
            movil1.setMarca("KIA");
            movil1.setModelo("RIO 5");
            movil1.setEstado(Constantes.ESTADO_ACTIVO);
            
            movil1.getFotosMovil().add("C://foto1");
            movil1.getFotosMovil().add("C://foto2");
                        
            movilDao.guardar(movil1);
        
        //ASIGNAR MOVIL AL PROPIETARIO
            System.out.println("\n  >>  ASIGNAR MOVIL AL PROPIETARIO");
            prop.getMoviles().add(movil1);
            movil1.setPropietario(prop);
            //propietarioDao.guardar(prop);
            movilDao.guardar(movil1);
            
        //LISTAR LAS MOVILES DE UN PROPIETARIO
            System.out.println("\n  >>  LISTAR LAS MOVILES DE UN PROPIETARIO");
            //se utiliza esta modalidad mientras se prueba standalone, para web se puede poner un interceptor
            //que resuelve los problemas de lazy fetch
            HibernateTransactionManager tManager=(HibernateTransactionManager) appContext.getBean("transactionManager");
            final TransactionTemplate transactionTemplate;
            transactionTemplate = new TransactionTemplate(tManager);
            
            transactionTemplate.execute(new TransactionCallback() {                
                // the code in this method executes in a transactional context
                public Object doInTransaction(TransactionStatus status) {
                  final List<PropietarioBean> lstPropietarios=propietarioDao.buscarTodos();
                  for(PropietarioBean bean:lstPropietarios){
                    System.out.println("propietario id: "+bean.getId());
                    System.out.println("moviles: "+bean.getMoviles().size());
                    for(MovilBean mbean:bean.getMoviles()){
                        System.out.println(" - "+mbean.getId()+" , "+mbean.getCodigo());
                        for(String ruta:mbean.getFotosMovil()){
                            System.out.println("    * r:"+ruta);
                        }
                    }
                  }
                  return true;                
                }                                 
            });        
            
        //REGISTRAR CHOFER
            System.out.println("\n  >>  REGISTRAR CHOFER");            
            final ChoferBean chofer=new ChoferBean();
            chofer.setCodigo("C1");
            chofer.setNombres("Toreto");
            chofer.setApellidoPaterno("Meteoro");
            chofer.setApellidoMaterno("Shumacher");
            chofer.setLogin("C1");
            chofer.setPassword("1234");
            chofer.setEstado(Constantes.ESTADO_ACTIVO);
            chofer.setTipoDocumento(Constantes.TIPO_DOCUMENTO_DNI);
            chofer.setNumeroDocumento("12345678");
            chofer.setFechaNacimiento(new Date());
            chofer.setFechaIngreso(new Date());
            chofer.setSexo(Constantes.SEXO_MASCULINO);
            choferDao.guardar(chofer);
            
        //ASIGNAR MOVIL AL CHOFER
            System.out.println("\n  >>  ASIGNAR MOVIL AL CHOFER");
            chofer.getMoviles().add(movil1);
            choferDao.guardar(chofer);
            
        //LISTAR CHOFERES DE MOVIL                      
             
             transactionTemplate.execute(new TransactionCallback() {                
                // the code in this method executes in a transactional context
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  LISTAR CHOFERES DE MOVIL");
                    MovilBean movilRecuperada=movilDao.buscar(movil1);
                    System.out.println("id movil: "+movilRecuperada.getId());
                    for(ChoferBean choferMovil:movilRecuperada.getChoferes()){
                        System.out.println(" - c: "+choferMovil.getNombres());
                    }
                  return true;                
                }                                 
            });        
          
        //REGISTRAR MARCACION     
             System.out.println("\n  >>  REGISTRAR MARCACION");             
             MarcacionBean marcacion1=new MarcacionBean();
             marcacion1.setChofer(chofer);
             marcacion1.setMovil(movil1);
             marcacion1.setFechaIngreso(new Date());
             marcacion1.setEstadoAtencion(Constantes.ESTADO_ATENCION_LIBRE);
             marcacion1.setTelefono("112233412");
             
             marcacionDao.guardar(marcacion1);
             
             movil1.setUltimaMarcacion(marcacion1);
             movilDao.guardar(movil1);
             
             chofer.setUltimaMarcacion(marcacion1);
             choferDao.guardar(chofer);
        
        //LISTAR LAS MARCACIONES DE UNA MOVIL
             transactionTemplate.execute(new TransactionCallback() {                
                // the code in this method executes in a transactional context
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  LISTAR LAS MARCACIONES DE UNA MOVIL");
                    MovilBean movilRecuperada=movilDao.buscar(movil1);
                    System.out.println("id movil: "+movilRecuperada.getId());
                    for(MarcacionBean marcacionMovil:movilRecuperada.getMarcaciones()){
                        System.out.println(" - m: "+marcacionMovil.getId());
                    }
                  return true;                
                }                                 
            });  
        
        //LISTAR LAS MARCACIONES DE UN CHOFER
             transactionTemplate.execute(new TransactionCallback() {                
                // the code in this method executes in a transactional context
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  LISTAR LAS MARCACIONES DE UN CHOFER");
                    ChoferBean choferRecuperado=choferDao.buscar(chofer);
                    System.out.println("id chofer: "+choferRecuperado.getId());
                    for(MarcacionBean marcacionMovil:choferRecuperado.getMarcaciones()){
                        System.out.println(" - m: "+marcacionMovil.getId());
                    }
                  return true;                
                }                                 
            });       
             
        //REGISTRAR TRACKING
             System.out.println("\n  >>  REGISTRAR TRACKING");
             TrackingBean tracking1=new TrackingBean();
             tracking1.setMovil(movil1);
             tracking1.setLatitud(10d);
             tracking1.setLongitud(20d);
             tracking1.setFechaRegistro(new Date());
             trackingDao.guardar(tracking1);
             
             TrackingBean tracking2=new TrackingBean();
             tracking2.setMovil(movil1);
             tracking2.setLatitud(20d);
             tracking2.setLongitud(30d);
             tracking2.setFechaRegistro(new Date());
             trackingDao.guardar(tracking2);
             
        //LISTAR EL TRACKING DE UNA MOVIL
             transactionTemplate.execute(new TransactionCallback() {                                
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  LISTAR EL TRACKING DE UNA MOVIL");
                    MovilBean movilRecuperada=movilDao.buscar(movil1);
                    System.out.println("id movil: "+movilRecuperada.getId());
                    for(TrackingBean trackingMovil:movilRecuperada.getTracking()){
                        System.out.println(" - t: "+trackingMovil.getId());
                    }
                  return true;                
                }                                      
            });   
             
          //REGISTRAR ULTIMA POSICION TRACKING
             System.out.println("\n  >>  REGISTRAR  ULTIMA POSICION TRACKING");
             movil1.setUltimoTracking(tracking2);
             movilDao.guardar(movil1);
             
          //OBTENER ULTIMA POSICION DE UNA MOVIL
             transactionTemplate.execute(new TransactionCallback() {                                
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  OBTENER ULTIMA POSICION DE UNA MOVIL");
                    MovilBean movilRecuperada=movilDao.buscar(movil1);
                    System.out.println("id movil: "+movilRecuperada.getId());
                    System.out.println("ultimo tracking: "+movilRecuperada.getUltimoTracking().getId());                    
                  return true;                
                }                                      
            });
             
         //REGISTRAR GRUPO DE CHOFERES
             System.out.println("\n  >>  REGISTRAR GRUPO DE CHOFERES");
             GrupoBean grupo1=new GrupoBean();
             grupo1.setNombre("Grupo 1");
             grupo1.setDescripcion("este es el grupo 1");
             grupo1.setFechaCreacion(new Date());
             grupo1.setTipo(Constantes.TIPO_GRUPO_CHOFERES);
             ArrayList<ChoferBean> choferes=new ArrayList<ChoferBean>();
             choferes.add(chofer);
             grupo1.setChoferes(choferes);
             
             grupoDao.guardar(grupo1);
         
         //OBTENER GRUPOS DE UN CHOFER
             transactionTemplate.execute(new TransactionCallback() {                                
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  OBTENER GRUPOS DE UN CHOFER");
                    ChoferBean choferRecuperado=choferDao.buscar(chofer);
                    System.out.println("id chofer: "+choferRecuperado.getId());
                    for(GrupoBean grupoChofer:choferRecuperado.getGrupos()){
                        System.out.println(" - g: "+grupoChofer.getId());
                    }                   
                  return true;                
                }                                      
            });
             
         //REGISTRAR GRUPOS DE MOVILES
             System.out.println("\n  >>  REGISTRAR GRUPOS DE MOVILES");
             GrupoBean grupo2=new GrupoBean();
             grupo2.setNombre("Grupo 2");
             grupo2.setDescripcion("este es el grupo 2");
             grupo2.setFechaCreacion(new Date());
             grupo2.setTipo(Constantes.TIPO_GRUPO_MOVILES);
             ArrayList<MovilBean> moviles=new ArrayList<MovilBean>();
             moviles.add(movil1);
             grupo2.setMoviles(moviles);
             
             grupoDao.guardar(grupo2);
             
         //OBTENER GRUPOS DE UNA MOVIL
             transactionTemplate.execute(new TransactionCallback() {                                
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  OBTENER GRUPOS DE UNA MOVIL");
                    MovilBean movilRecuperada=movilDao.buscar(movil1);
                    System.out.println("id movil: "+movilRecuperada.getId());
                    for(GrupoBean grupoMovil:movilRecuperada.getGrupos()){
                        System.out.println(" - g: "+grupoMovil.getId());
                    }                  
                  return true;                
                }                                      
            });
             
         //REGISTRAR MENSAJE
             System.out.println("\n  >>  REGISTRAR MENSAJE");
             MensajeBean mensaje1=new MensajeBean();
             mensaje1.setTitulo("El mensaje");
             mensaje1.setTexto("Pague su plan de datos");   
             mensaje1.setFechaCreacion(new Date());
             ArrayList<ChoferBean> choferesM=new ArrayList<ChoferBean>();
             choferesM.add(chofer);
             mensaje1.setChoferes(choferesM);
             
             mensajeDao.guardar(mensaje1);
             
         //OBTENER MENSAJES DE UN CHOFER
             transactionTemplate.execute(new TransactionCallback() {                                
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  OBTENER MENSAJES DE UN CHOFER");
                    ChoferBean choferRecuperado=choferDao.buscar(chofer);
                    System.out.println("id chofer: "+choferRecuperado.getId());
                    for(MensajeBean mensajeChofer:choferRecuperado.getMensajes()){
                        System.out.println(" - m: "+mensajeChofer.getId()+ " : "+mensajeChofer.getTitulo());
                    }                   
                  return true;                
                }                                      
            });
             
         //REGISTRAR TIPO ALERTA
             System.out.println("\n  >>  REGISTRAR TIPO ALERTA");
             AlertaBean tipoAlerta1=new AlertaBean();
             tipoAlerta1.setCodigo("101");
             tipoAlerta1.setNombre("PROBLEMA MECANICO");
             tipoAlerta1.setImportancia(1);
             tipoAlerta1.setEstado(Constantes.ESTADO_ACTIVO);
             alertaDao.guardar(tipoAlerta1);
             
             AlertaBean tipoAlerta2=new AlertaBean();
             tipoAlerta2.setCodigo("102");
             tipoAlerta2.setNombre("ROBO");
             tipoAlerta2.setImportancia(2);
             tipoAlerta2.setEstado(Constantes.ESTADO_ACTIVO);
             alertaDao.guardar(tipoAlerta2);             
             
         //REGISTRAR ALERTA
             System.out.println("\n  >>  REGISTRAR ALERTA");
             AlertaEnviadaBean alerta1=new AlertaEnviadaBean();
             alerta1.setEstadoAlerta(Constantes.ESTADO_ALERTA_PENDIENTE);
             alerta1.setFechaEnvio(new Date());
             alerta1.setAlerta(tipoAlerta1);
             alerta1.setMovil(movil1);
             alerta1.setChofer(chofer);
             alertaEnviadaDao.guardar(alerta1);
             
         //OBTENER ALERTAS DE UN CHOFER
             transactionTemplate.execute(new TransactionCallback() {                                
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  OBTENER ALERTAS DE UN CHOFER");
                    ChoferBean choferRecuperado=choferDao.buscar(chofer);
                    System.out.println("id chofer: "+choferRecuperado.getId());
                    for(AlertaEnviadaBean alertaChofer:choferRecuperado.getAlertasEnviadas()){
                        System.out.println(" - a: "+alertaChofer.getId()+ " : "+alertaChofer.getAlerta().getNombre());
                    }                   
                  return true;                
                }                                      
            });
         
         //OBTENER GRUPOS DE UNA MOVIL
             transactionTemplate.execute(new TransactionCallback() {                                
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  OBTENER GRUPOS DE UNA MOVIL");
                    MovilBean movilRecuperada=movilDao.buscar(movil1);
                    System.out.println("id movil: "+movilRecuperada.getId());
                    for(AlertaEnviadaBean alertaMovil:movilRecuperada.getAlertasEnviadas()){
                        System.out.println(" - a: "+alertaMovil.getId()+ " : "+alertaMovil.getAlerta().getNombre());
                    }                  
                  return true;                
                }                                      
            });
             
         //REGISTRAR ZONA
             System.out.println("\n  >>  REGISTRAR ZONA");
             final ZonaBean zona1=new ZonaBean();
             zona1.setNombre("Santa María");
             zona1.setEstado(Constantes.ESTADO_ACTIVO);
             zonaDao.guardar(zona1);
             
             final ZonaBean zona2=new ZonaBean();
             zona2.setNombre("California");
             zona2.setEstado(Constantes.ESTADO_ACTIVO);
             zonaDao.guardar(zona2);
             
         //REGISTRAR OPERADOR
             System.out.println("\n  >>  REGISTRAR OPERADOR");
             final OperadorBean operador1=new OperadorBean();
             operador1.setNombres("Karl");
             operador1.setApellidoPaterno("Nixon");
             operador1.setApellidoMaterno("Walker");
             
             operadorDao.guardar(operador1);
             
         //REGISTRAR CLIENTE
             System.out.println("\n  >>  REGISTRAR CLIENTE");
             final ClienteBean cliente1=new ClienteBean();
             cliente1.setNombres("Sheldon");
             cliente1.setApellidoPaterno("Cooper");
             cliente1.setApellidoMaterno("Lee");
             cliente1.setTipoCliente(Constantes.TIPO_CLIENTE_PERSONA);
             cliente1.setEstado(Constantes.ESTADO_ACTIVO);
             cliente1.setSexo(Constantes.SEXO_MASCULINO);
             cliente1.getTelefonos().add("1231231");
             
             clienteDao.guardar(cliente1);
             
         //REGISTRAR DIRECCION    
             System.out.println("\n  >>  REGISTRAR DIRECCION");
             final DireccionClienteBean direccion1=new DireccionClienteBean();
             direccion1.setDireccion("la punta del cerro");
             direccion1.setReferencia("pasando la calavera pidiendo agua");
             direccion1.setEstado(Constantes.ESTADO_ACTIVO);
             direccion1.setLatitud(20d);
             direccion1.setLongitud(25d);
             direccion1.setTipoGPS(Constantes.TIPO_GPS_DIRECCION_WEB);
             direccion1.setZona(zona1);
             direccion1.setCliente(cliente1);
             
             direccionClienteDao.guardar(direccion1);
             
             
          //OBTENER DIRECCIONES DE UN CLIENTE
             transactionTemplate.execute(new TransactionCallback() {                                
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  OBTENER DIRECCIONES DE UN CLIENTE");
                    ClienteBean clienteRecuperado=clienteDao.buscar(cliente1);
                    System.out.println("cliente movil: "+clienteRecuperado.getId());
                    for(DireccionClienteBean direccionCliente:clienteRecuperado.getDirecciones()){
                        System.out.println(" - d: "+direccionCliente.getId()+ " : "+direccionCliente.getDireccion()+"... z:"+direccionCliente.getZona().getNombre());
                    }                  
                  return true;                
                }                                      
            });
             
          //REGISTRAR ESTADO    
             System.out.println("\n  >>  REGISTRAR ESTADO");
             final EstadoBean estado1=new EstadoBean();             
             estado1.setCodigo("104");
             estado1.setNombre("OK");
             estado1.setTipo(Constantes.TIPO_ESTADO_ATENCION);
             estado1.setAlerta(Boolean.TRUE);
             estado1.setEstado(Constantes.ESTADO_ACTIVO);
             estado1.setMovil(Boolean.TRUE);
             estado1.setWeb(Boolean.TRUE);
             estado1.setServicioAsignado(Boolean.TRUE);
             estado1.setServicioLibre(Boolean.FALSE);             
             
             estadoDao.guardar(estado1);
             
             final EstadoBean estado2=new EstadoBean();             
             estado2.setCodigo("105");
             estado2.setNombre("NO");
             estado2.setTipo(Constantes.TIPO_ESTADO_ATENCION);
             estado2.setAlerta(Boolean.TRUE);
             estado2.setEstado(Constantes.ESTADO_ACTIVO);
             estado2.setMovil(Boolean.TRUE);
             estado2.setWeb(Boolean.TRUE);
             estado2.setServicioAsignado(Boolean.TRUE);
             estado2.setServicioLibre(Boolean.FALSE);             
             
             estadoDao.guardar(estado2);
             
         //REGISTRAR SERVICIO    
             System.out.println("\n  >>  REGISTRAR SERVICIO");
             final ServicioBean servicio1=new ServicioBean();
             servicio1.setChofer(chofer);
             servicio1.setMovil(movil1);
             servicio1.setCliente(cliente1);
             servicio1.setDireccion(direccion1);
             servicio1.setUltimoEstadoServicio(estado2);
             servicio1.setFechaRegistro(new Date());
             servicio1.setFinalizado(Boolean.FALSE);
             servicio1.setTipo(Constantes.TIPO_SERVICIO_ASIGNADO);
             servicio1.setNecesitaAtencion(Boolean.FALSE);
             
             servicio1.setOperador(operador1);
             
             servicioDao.guardar(servicio1);
             
         //OBTENER SERVICIOS DE UNA MOVIL
             transactionTemplate.execute(new TransactionCallback() {                                
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  OBTENER SERVICIOS DE UNA MOVIL");
                    MovilBean movilRecuperada=movilDao.buscar(movil1);
                    System.out.println("id movil: "+movilRecuperada.getId());
                    for(ServicioBean servicioMovil:movilRecuperada.getServicios()){
                        System.out.println(" - s: "+servicioMovil.getId()+ " : "+servicioMovil.getUltimoEstadoServicio().getNombre());
                    }                  
                  return true;                
                }                                      
            });
         
        //REGISTRAR DETALLE SERVICIO
             System.out.println("\n  >>  REGISTRAR DETALLE SERVICIO");
             final DetalleServicioBean detalle1=new DetalleServicioBean();
             detalle1.setServicio(servicio1);
             detalle1.setEstadoServicio(estado2);
             detalle1.setFechaRegistro(new Date());
             detalle1.setOrigen(Constantes.ORIGEN_WEB);
             
             detalleServicioDao.guardar(detalle1);
             
             
        //OBTENER SERVICIOS Y DETALLES DE UNA MOVIL
             transactionTemplate.execute(new TransactionCallback() {                                
                public Object doInTransaction(TransactionStatus status) {
                  System.out.println("\n  >>  OBTENER SERVICIOS Y DETALLES DE UNA MOVIL");
                    MovilBean movilRecuperada=movilDao.buscar(movil1);
                    System.out.println("id movil: "+movilRecuperada.getId());
                    for(ServicioBean servicioMovil:movilRecuperada.getServicios()){
                        System.out.println(" - s: "+servicioMovil.getId()+ " : "+servicioMovil.getUltimoEstadoServicio().getNombre());
                        for(DetalleServicioBean detalle:servicioMovil.getDetallesServicio()){
                            System.out.println("   + d: "+detalle.getId()+ " : "+detalle.getEstadoServicio().getNombre());
                        }
                    }                  
                  return true;                
                }                                      
            });     
             
        //REGISTRAR TARIFA
             System.out.println("\n  >>  REGISTRAR TARIFA");
             TarifaBean tarifa1=new TarifaBean();
             tarifa1.setZonaOrigen(zona1);
             tarifa1.setZonaDestino(zona2);
             
             tarifaDao.guardar(tarifa1);
             
        //REGISTRAR TARIFA
             System.out.println("\n  >>  REGISTRAR DETALLE TARIFA");
             DetalleTarifaBean detalleTarifa1=new DetalleTarifaBean();
             detalleTarifa1.setDescripcion("T. Dia");
             detalleTarifa1.setTarifa(tarifa1);
             detalleTarifa1.setMonto(4.5);
             
             detalleTarifaDao.guardar(detalleTarifa1);
             
        //REGISTRAR PUNTO GEOCERCA
             System.out.println("\n  >>  REGISTRAR PUNTO GEOCERCA");
             PuntoGeocercaBean puntoGeocerca=new PuntoGeocercaBean();
             puntoGeocerca.setLatitud(15d);
             puntoGeocerca.setLongitud(8d);
             puntoGeocerca.setOrden(1);
             puntoGeocerca.setZona(zona1);
             
             puntoGeocercaDao.guardar(puntoGeocerca);
             
             
        //RECUPERAR MENSAJES DE UN TAXISTA
             List<MensajeBean> mensajesNuevos= mensajeDao.buscarNuevos(1l, 0l);
             if(!mensajesNuevos.isEmpty()){
                 System.out.println("primer mensajeNuevo: "+mensajesNuevos.get(0).getTitulo());
             }else{
                 System.out.println("no se encontraron mensajes...");
             }
    }
}
